<?php
declare (strict_types=1);

namespace app\common\util;

use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use app\common\exception\MyException;

/**
 * jwt 加解密
 */
class JwtUtil
{
    /**
     * 获取配置
     */
    public static function getkeyalg()
    {
        $secretKey = config('kaige.jwt_secret_key','kaige_skey');
        $algorithm = config('kaige.jwt_algorithm','HS256');
        return [$secretKey,$algorithm];
    }

    /** 加密
     * @param $payload 代表JWT's payload的对象或数组
     * @return mixed 已编码的json web token字符串
     */
    public static function encode($payload)
    {
        $arr = self::getkeyalg();
        // 使用Firebase JWT解码并返回
        return JWT::encode($payload, $arr[0], $arr[1]);
    }

    /**
     * 解密
     * @param $jwt 已编码的json web token字符串
     * @return mixed 签名认证通过时，代表JWT's payload的对象；解码或签名认证失败时，false；
     */
    public static function decode($jwt)
    {
        // 使用Firebase JWT解码
        $arr = self::getkeyalg();
        $decode = JWT::decode($jwt, new Key($arr[0], $arr[1]));
        $decode = json_decode(json_encode($decode), true);
        return $decode;
    }
}
